package fachada;

import java.util.Calendar;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import sessionBeansInterfaces.GestorArticulos;
import sessionBeansInterfaces.GestorEnvt;
import sessionBeansInterfaces.GestorOfad;
import sessionBeansInterfaces.GestorPalc;
import sessionBeansInterfaces.GestorVenta;
import utils.exceptions.ArticuloNoEncontradoException;
import utils.exceptions.ArticuloSinStockException;
import utils.exceptions.VentaRechazadaException;
import entities.vo.ArticuloEnvtVO;
import entities.vo.ArticuloPalcVO;
import entities.vo.ArticuloVO;
import entities.vo.ENVTVO;
import entities.vo.FacturaVO;
import entities.vo.OFADVO;
import entities.vo.PedidoVO;

@Remote
public @Stateless class FachadaBean implements Fachada {

	@EJB(name="TiendaZARAServidor/GestorOfadBean/local") 
	private GestorOfad 					gestorOfadBean;
	@EJB(name="TiendaZARAServidor/GestorArticulosBean/local")
	private GestorArticulos				gestorArticulos;
	@EJB(name="TiendaZARAServidor/GestorEnvtBean/local")
	private GestorEnvt					gestorEnvt;
	@EJB(name="TiendaZARAServidor/GestorVentatBean/local")
	private GestorVenta					gestorVenta;
	@EJB(name="TiendaZARAServidor/GestorPalcBean/local")
	private GestorPalc					gestorPalc;

	public void generarFactura(FacturaVO facturaVO) throws VentaRechazadaException {
		gestorVenta.generarFactura(facturaVO);		
	}

	public String generarPedido(PedidoVO pedidoVO) {
		return gestorPalc.generarPedido(pedidoVO);
	}

	public ArticuloVO getArticulo(Integer referencia) {		
		return gestorArticulos.getArticulo(referencia);
	}

	public List<ArticuloVO> getArticulos() {
		return gestorArticulos.getArticulosVO();
	}

	public List<ArticuloPalcVO> getArticulosPALC() {
		return gestorPalc.getArticulosPALC();
	}

	public Calendar getFecha() {
		return gestorVenta.getFecha();
	}

	public Long getNumeroFactura() {
		return gestorVenta.getNumeroFactura();
	}

	public String recibirENVT(ENVTVO envt)throws Exception {
		return gestorEnvt.recibirENVT(envt);		
	}

	public String procesarNuevaOFAD(OFADVO ofad) {
		return gestorOfadBean.procesarNuevaOFAD(ofad);
	}

	public List<ArticuloVO> getNuevoArticulo(List<ArticuloVO> articulos) {	
		return gestorOfadBean.getNuevoArticulo(articulos);
	}

	public List<ArticuloEnvtVO> getArticulosENVT(List<ArticuloEnvtVO> articulos) {
		return gestorEnvt.getArticulosENVT(articulos);
	}

	public ArticuloVO actualizarStock(Integer referencia, int stock) throws ArticuloSinStockException, ArticuloNoEncontradoException {
		return gestorArticulos.actualizarStock(referencia,stock);
	}

	public Long getNroNuevoPedido() {
		return gestorPalc.getNroNuevoPedido();
	}



}
